v4.0
キャラクタ リギング
ボーンの長さ全体にわたって回転のヌルを作成します。
エンベロープのデフォーマとして使用すると、ボーンの長さ全体に均等にツイストを分散し、より自然なスキンのデフォーメーションを実現できます。
上腕の回転と前腕の回転では、開始と終端の回転は別々の方法で決定されます(MakeBicepRollを参照)。
前腕の回転では、開始の回転は前腕の回転からスピンを除いたもので、上腕の回転から計算されます。
終端の回転は、次のボーン(手首)の回転でスピンが加えられています。 回転分割の回転は、開始と終端の間で補間されます。
上腕の回転の場合には、上腕のボーンが開始の回転および終端の回転の両方に使用されます。
開始の回転はボーンの回転からスピンを除いたもので、終端の回転はスピンありの回転です。
oForeArmRoll = MakeForearmRoll( Bicep, Forearm, ArmEff, HandEff, HandBone, [Prefix], [NbDivisions], [RollOffset] ); |
ForeArmRoll JScript オブジェクトを戻します。
| パラメータ | タイプ | 詳細 |
|---|---|---|
| Bicep | 文字列 | スピンなしの前腕の回転を計算するために使用する、前腕の前のチェイン エレメント。 |
| Forearm | 文字列 | 回転のヌルの親となるオブジェクト。 |
| ArmEff | 文字列 | 上腕と前腕を含むチェインのエフェクタ。 |
| HandEff | 文字列 | 手首のチェインのエフェクタ。 |
| HandBone | 文字列 | 終端の回転を計算するために使用する、手首または手のボーン。 |
| Prefix | 文字列 | 新しい分割の名前に付加されるプリフィックス。 |
| NbDivisions | Integer | 回転分割の数。 値がゼロの場合には、回転は作成されません。
デフォルト値: 3 |
| RollOffset | ダブル | 前腕の回転のオフセットを度数で指定します。 回転は -180 ~ 180
度の範囲で、オフセットによって回転に継ぎ目を配置することができます。 この値は Hand Bone の下に配置されるカスタム
パラメータを制御し、インタラクティブに変更することができます。
デフォルト値: 0 |
/*
This script creates an arm, then puts roll division
on the forearm.
*/
var guidecoll = new ActiveXObject("XSI.Collection");
guidecoll.Add( GetPrim("Null", "ShoulderGuide") );
guidecoll.Add( GetPrim("Null", "ElbowGuide") );
guidecoll.Add( GetPrim("Null", "HandGuide") );
var lXfm = guidecoll(0).Kinematics.Global.Transform
var lPos = XSIMath.CreateVector3();
/*
Right Arm
*/
lXfm.SetTranslationFromValues(0,0,0);
guidecoll(0).Kinematics.Global.Transform = lXfm;
lXfm.SetTranslationFromValues(4,0,-2);
guidecoll(1).Kinematics.Global.Transform = lXfm;
lXfm.SetTranslationFromValues(8,0,0);
guidecoll(2).Kinematics.Global.Transform = lXfm;
var RArm = MakeArm(ActiveSceneRoot, guidecoll, "R",null, 0,0,0,null ,null, 0);
/*
Add a Hand
*/
var lPosStart = XSIMath.CreateVector3();
var lPosEnd = XSIMath.CreateVector3();
lPosStart.Set(8,0,0);
lPosEnd.Set(9,0,0);
var HandChain = ActiveSceneRoot.Add2DChain(lPosStart, lPosEnd);
var ForeArmRoll = MakeForearmRoll( RArm.Root.Bones(0), //bicep
RArm.Root.Bones(1), //forearm
RArm.Eff, //arm effector
HandChain.Effector, //hand effector
HandChain.Bones(0), //hand
"R"); //new object name prefix
DumpForearmRoll(ForeArmRoll );
function DumpForearmRoll(inForeArmRoll )
{
logmessage ("Data in the returned arm object:");
logmessage ("-------------------------------");
logmessage ("Sliders : " + inForeArmRoll.Sliders);
logmessage ("RollOffset: " + inForeArmRoll.RollOffset.value);
logmessage ("#Divisions: " + inForeArmRoll.Nb);
for(var b=0;b<ForeArmRoll.Divisions.count;b++)
{logmessage (" RollDif" + b + ": " + inForeArmRoll.Divisions(b));}
}
//results of running this script:
//INFO : "Data in the returned arm object:"
//INFO : "-------------------------------"
//INFO : "Sliders : bone.Roll_Compensation"
//INFO : "RollOffset: 0"
//INFO : "#Divisions: 3"
//INFO : " RollDif0: RElbow"
//INFO : " RollDif1: RForearmRoll"
//INFO : " RollDif2: RForearmRoll1"
//
|